10. 미사일 폭파시 데미지
1. Sphere Overlap
단순히 액터를 감지하고 데미지를 주면 벽 너머로 히트가 발생하게 된다. 그래서 Overlap으로 감지한 후, Line Trace로 액터 사이에 벽이 있는지 한번 더 감지한다.
매우 작은 벽에 막히는 경우는 어떻게?
벽 너머로 히트가 발생하는 문제

- 벽 너머로 히트가 발생하지 않도록 수정

2. IHitInterface
class IHitInterface
{
public:
virtual void OnHit(AActor* Instigator) = 0;
};
class AHitReactor : public APhysicsBox, public IHitInterface
{
virtual void OnHit(AActor* Instigator) override;
};
IHitInterface를 통해 Hit 이벤트를 발동시킨다.
3. HitManager
![[]] 위와 같이 Grid 형태로 미사일이 착탄되는데, 단순히 데미지를 주게 되면 각각의 미사일이 액터에게 데미지를 주어 액터가 여러번 데미지를 받게 된다. 따라서 AHitManager 액터를 만들어서, 데미지를 주는 것을 이 매니저 액터가 책임지도록 하게 한다. ```cpp class AHitManager : public AActor { public: void AddInstigator(AActor* Instigator);
/**
* @brief 관리 대상에서 인스티게이터를 제거합니다.
* @param Instigator 제거할 액터.
* @param bDestroyIfEmpty true일 경우, 남은 인스티게이터가 없으면 매니저를 즉시 파괴(Decommission)합니다.
/
void RemoveInstigator(AActor Instigator, bool bDestroyIfEmpty = true);
// 해당 Instigator가 목록에 존재할 경우 목록의 인덱스 반환
// 없을 경우 -1 반환
int GetInstigatorIndex(AActor* Instigator);
// 해당 HittedActors가 목록에 존재할 경우 목록의 인덱스 반환
// 없을 경우 -1 반환
int GetHittedActorIndex(IHitInterface* HittedActors);
bool DestroyIfEmpty();
void Hit(IHitInterface* Victim, AActor* Instigator);
private:
TArray<IHitInterface*> mHittedActors;
TArray<AActor*> mInstigators;
};
- **Hit가 여러번 되는 장면**

- **Hit가 한번만 되는 장면**
